<?php

namespace Common\Repository;

class BaseRepository
{
    /**
     * 模型名称
     * @return mixed
     */
    public function model_child()
    {
        return get_called_class()::baseModel();
    }

    /**
     * 查询一条数据-根据主键查询
     * @param int $id
     * @param array $arr_option
     * @return mixed
     */
    public function findOne(int $id, $arr_option = [])
    {
        return self::model_child()->CommonFind($id, $arr_option);
    }

    /**
     * 查询一条数据-根据where条件查询
     * @param array $arr_option
     * @return mixed
     */
    public function getOne($arr_option = [])
    {
        return self::model_child()->CommonGetOne($arr_option);
    }

    /**
     * 查询列表-含分页
     * @param array $arr_option
     * @return mixed
     */
    public function getList($arr_option = [])
    {
        return self::model_child()->CommonGetList($arr_option);
    }

    /**
     * 查询所有数据
     * @param array $arr_option
     * @return mixed
     */
    public function getAll($arr_option = [])
    {
        return self::model_child()->CommonGetAll($arr_option);
    }

    /**
     * 添加一条数据
     * @param $post_data
     * @return mixed
     */
    public function addOne($post_data)
    {
        return self::model_child()->create($post_data)->toArray();
    }

    /**
     * 添加多条数据
     * @param $post_data
     * @return mixed
     */
    public function addMany($post_data)
    {
        return self::model_child()->insert($post_data);
    }

    /**
     * 根据条件统计数量
     * @param $where
     * @return mixed
     */
    public function getCountByWhere($where)
    {
        return self::model_child()->where($where)->count();
    }

    /**
     * 根据条件统计总和
     * @param array $where
     * @param string $field
     * @return mixed
     */
    public function getSumByWhere($where = [], $field = 'mark')
    {
        return self::model_child()->where($where)->sum($field);
    }

    /**
     * 根据主键id修改一条数据
     * @param array $update_data
     * @return mixed
     */
    public function editOne(array $update_data)
    {
        return self::model_child()->where('id', $update_data['id'])->update($update_data);
    }

    /**
     * 根据条件修改一条数据
     * @param array $where
     * @param array $update_data
     * @return mixed
     */
    public function editByWhere($where = [], $update_data = [])
    {
        return self::model_child()->where($where)->update($update_data);
    }

    /**
     * 根据wherein条件更新数据
     * @param array $where
     * @param array $update_data
     * @param string $field
     * @return mixed
     */
    public function editByWhereIn($where = [], $update_data = [], $field = 'id')
    {
        return self::model_child()->whereIn($field, $where)->update($update_data);
    }

    /**
     * 根据主键id删除一条数据
     * @param int $id
     * @param bool $bool
     * @return mixed
     */
    public function deleteOne(int $id, bool $bool = false)
    {
        return self::model_child()->where('id', $id)->CommonDelete($bool);
    }

    /**
     * 根据条件批量删除信息
     * @param array $where
     * @param bool $bool
     * @return mixed
     */
    public function deleteByWhere($where = [], bool $bool = false)
    {
        return self::model_child()->where($where)->CommonDelete($bool);
    }

    /**
     * 根据wherein条件删除数据
     * @param string $field
     * @param array $where
     * @param bool $bool
     * @return mixed
     */
    public function deleteByWhereIn($field = 'id', $where = [], $bool = false)
    {
        return self::model_child()->whereIn($field, $where)->CommonDelete($bool);
    }
}